package roles_handler

import (
	"peilian-api/app/global/bind"
	"peilian-api/app/global/errors"
	"peilian-api/app/model"
	roles_service "peilian-api/app/services/roles_servie"
	"peilian-api/utils/format"

	"github.com/gin-gonic/gin"
)

// 获取user的权限uri
func GetUserPermission(ctx *gin.Context) {
	var rolesId model.RolesId
	if err := bind.ShouldBinding(ctx, &rolesId); err != nil {
		format.NewResponseJson(ctx).Err(errors.PublicErrorCode, errors.ParamBindError)
		return
	}
	out, err := new(roles_service.RolesService).GetUserPermission(ctx)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessDataList(len(out), out)
}

// 获取当前页面的uri
func GetPagePermission(ctx *gin.Context) {
	var rolesId model.RolesId
	if err := bind.ShouldBinding(ctx, &rolesId); err != nil {
		format.NewResponseJson(ctx).Err(errors.PublicErrorCode, errors.ParamBindError)
		return
	}
	out, err := new(roles_service.RolesService).GetPagePermission(ctx, rolesId)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessDataList(len(out), out)
}

// 添加角色
func AddRoles(ctx *gin.Context) {
	var rsr model.RolesAddRes
	if err := bind.ShouldBinding(ctx, &rsr); err != nil {
		format.NewResponseJson(ctx).ErrObj(errors.PublicErrorCode, errors.ParamBindError)
		return
	}
	err := new(roles_service.RolesService).AddRoles(ctx, rsr)
	if err != nil {
		format.NewResponseJson(ctx).ErrObj(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(struct{}{})
}

// 更新角色信息
func UpdateRoles(ctx *gin.Context) {
	var rsr model.RolesUpdateRes
	if err := bind.ShouldBinding(ctx, &rsr); err != nil {
		format.NewResponseJson(ctx).ErrObj(errors.PublicErrorCode, errors.ParamBindError)
		return
	}
	err := new(roles_service.RolesService).UpdateRolesById(ctx, rsr)
	if err != nil {
		format.NewResponseJson(ctx).ErrObj(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(struct{}{})
}

// 删除角色信息
func DeleteRoles(ctx *gin.Context) {
	var rsr model.RolesId
	if err := bind.ShouldBinding(ctx, &rsr); err != nil {
		format.NewResponseJson(ctx).ErrObj(errors.PublicErrorCode, errors.ParamBindError)
		return
	}
	err := new(roles_service.RolesService).DeleteRolesById(ctx, rsr)
	if err != nil {
		format.NewResponseJson(ctx).ErrObj(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(struct{}{})
}

// 获取角色信息
func GetRolesList(ctx *gin.Context) {
	var rsr model.RolesListRes
	if err := bind.ShouldBinding(ctx, &rsr); err != nil {
		format.NewResponseJson(ctx).Err(errors.PublicErrorCode, errors.ParamBindError)
		return
	}
	out, err := new(roles_service.RolesService).GetRolesList(ctx, rsr)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessDataList(len(out), out)
}

// 获取角色信息详情
func GetDetailById(ctx *gin.Context) {
	var s model.RolesId
	if err := bind.ShouldBinding(ctx, &s); err != nil {
		format.NewResponseJson(ctx).Err(errors.PublicErrorCode, errors.ParamBindError)
		return
	}
	out, err := new(roles_service.RolesService).GetRolesById(ctx, s)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessJson(out)
}
